package com.itjiange;

import lombok.Data;

/**
 * 口香糖贩卖机
 *
 * @author ItJianGe
 * @data 2024/8/20 17:16
 */
@Data
public class GumballMachine {

    /**
     * 已经投放钱币的状态
     */
    private Status hasCoinStatus;

    /**
     * 没有投放钱币的状态
     */
    private Status noCoinStatus;

    /**
     * 售卖口香糖的状态
     */
    private Status soleChewStatus;

    /**
     * 口香糖售罄的状态
     */
    private Status soleChewEmptyStatus;

    /**
     * 当前状态，默认为售罄的状态
     */
    private Status status = soleChewEmptyStatus;

    /**
     * 口香糖的个数
     */
    private int chewCount;

    public GumballMachine(int chewCount) {
        this.hasCoinStatus = new HasCoinStatus(this);
        this.noCoinStatus = new NoCoinStatus(this);
        this.soleChewEmptyStatus = new SoleChewEmptyStatus(this);
        this.soleChewStatus = new SoleChewStatus(this);
        this.chewCount = chewCount;
        if (this.chewCount > 0) {
            // 如果采购了口香糖，则口香糖机的状态为未投币状态
            this.status = this.noCoinStatus;
        }
    }

    /**
     * 开始投币
     */
    public void insertCoin() {
        status.insertCoin();
    }

    /**
     * 进行退款
     */
    public void undoCoin() {
        status.undoCoin();
    }

    /**
     * 购买口香糖
     */
    public void buyChew() {
        // 1. 转动曲柄
        status.turnCrank();
        // 2. 发放口香糖
        status.dispense();
    }

    /**
     * 减少口香糖
     */
    public void releaseChew() {
        if (chewCount > 0) {
            System.out.println("一个口香糖正在出库");
            chewCount--;
        } else {
            System.out.println("目前没有口香糖了。。。");
        }
    }
}
